1 - Bildschirm (CGA Textmode) [ID:21377]
50 von 80 angezeigt

Die erste Grafikkarte die IBM verkaufte war dieser Color Graphics Adapter aus dem Jahre 1981.

Für anfangs 1000DMark bekam man bis zu 16 Farben und hatte ganze 16 KB Videospiecher.

Die Grafikauflösung betrug bis zu 640x200 Pixel, aber dann nur mit zwei Farben. Alle 16 Farben

konnte man allerdings nur im Textmodus gleichzeitig nutzen. Und dieser Textmodus ist auch bei den

Nachfolgern Enhanced Graphics Adapter, EGA und Video Graphics Array, VGA bestehen geblieben und

wird von heutigen Systemen im Allgemeinen auch noch unterstützt. Wir haben in diesem Textmodus

25 Zahlen mit je 80 Zeichen zur Verfügung, können also 2000 Zeichen gleichzeitig am Bildschirm

anzeigen. Für jedes Zeichen brauchen wir dabei zwei Bytes. Das erste davon beinhaltet das

darzustellende Zeichen selbst. Der dazu verwendete Zeichensatz CodePage 437 trifft die druckbaren

ASCII Zeichen. In ASCII sind die ersten 32 Codes allerdings nicht druckbare Steuerzeichen,

wie beispielsweise die 10 für den Zeilenumbruch. Wenn wir hier diesen Wert als erstes Byte setzen,

sehen wir jedoch einen Block mit einem Kreis, denn alle Werte haben im Zeichensatz eine grafische

Repräsentation. Das zweite Byte dient der Konfiguration der Darstellung. Neben Spezialeffekten

wie dem Blinken kann man damit die Farben steuern. Von den 16 Farben stehen als Hintergrundfarbe nur

die ersten 8 zur Verfügung. Da sind allerdings alle relevanten Farben mit dabei, die anderen sind

eigentlich nur aufgehellte Farbvarianten, welche nur bei der Vordergrundfarbe verwenden können.

Der Videospeicher für diese Bytes ist in unserem Arbeitsspeicher eingeblendet ab Adresse 0xb8000.

Ein an die erste Adresse gespeichertes Byte, hier das B, wird an der ersten Stelle mit dem

nachfolgenden spezifizierten Darstellungsattribut eingeblendet. Das Byte an der Adresse 0xb80002

entspricht dann dem zweiten Zeichen am Bildschirm. Der hier dargestellte Speicher würde am Bildschirm

in rot das Wort bar auf hellgrauen Hintergrund ausgeben, wobei das erste Zeichen blinken wird.

Bitte beachten, das Blinken wird nicht zwangsläufig im Emulator dargestellt,

da das höchstwertige Bit auch anders interpretiert werden kann. Aber die Farben sollten übereinstimmen.

Um jetzt das Darstellungsattribut nach unserem Wünschen zu setzen, kann man die im Grundstudium

gelernten Bit-Aparationen verwenden. Bitwise ist und, oder, exklusiv ist oder, Negation,

sowie das Schiften. Um eine bessere Lesbarkeit zu ermöglichen, sollte man jedoch nicht wie hier die

dezimale Repräsentation verwenden, besser Hexwerte oder konstante Variable mit entsprechenden Namen.

Um jetzt beispielsweise in einer Variable x das EnteBit zu setzen oder zu löschen,

verwende man in der Regel diese gut lesbaren Konstrukte. Noch lesbarer sind allerdings Bitfelder.

Felder in Strukturen können mit einer Länge definiert werden, hier FG für foreground mit

4-Bit und background mit 3-Bit sowie blink mit einem Bit. Der Zugriff ist dann wie bei Strukturen

üblich, in Verbindung mit Inams eine intuitive Art die Attribute zu definieren. Die gesetzten

Werte entsprechen dann einem Byte mit diesem Speicherlayout. Das erste Feld foreground beginnt

beim niedrigwertigsten Bit. Nach dem C-Standard ist die Reihenfolge übrigens nicht spezifiziert,

aber auf dem x86 bilden alle relevanten Übersetzer das Wien-Beispiel ab. Allerdings gibt es bei

Strukturen Fallstriche die man wissen sollte, wenn man eine gewisse Darstellung im Speicher

erwartet. Diese Struktur hat ein CharArray, drei Elemente zu je ein Byte, ein Integer,

welcher auf der x86 Architektur 4-Byte belegt, sowie ein Pool, welcher wieder ein Byte braucht.

Somit haben wir 8 Byte an Nutzdaten, allerdings belegt es 12 Bytes. Grundsinn Fullbytes,

die der Übersetzer einbaut, dadurch ausgerichtete Werte führen zu einem schnelleren Zugriff.

Aber wenn wir ein bestimmtes Layout im Speicher brauchen, können wir den Übersetzer instruieren,

solche Optimierungen zu unterlassen, und zwar durch die Attributierung packed. Nun hat die

Struktur die erwartete Größe. Da solche Fehler, eine Struktur hat nicht die gewordene Größe,

gar nicht so einfach zu erkennen sind, empfiehlt es sich in solchen Fällen eine statische

Zusicherung anzugeben. Hiermit wird beim Übersetzen die Größe geprüft und bei einem Fehler abgebrochen.

Es wird mit diesen Zusicherungen kein Code erzeugt, es hat somit keine Auswirkung auf

die eigentliche Laufzeit und darf entsprechend reichlich verwendet werden.

Zurück zum Bildschirm. Um die aktuelle Position bei der Texteingabe zu sehen,

ist eine Schreibmarke, auch Cursor genannt, hilfreich. Die Position können wir natürlich

einfach in einer Variable speichern. Oder wir nehmen die entsprechende Funktionalität in unserer

Teil einer Videoserie :
Teil eines Kapitels:
Ein- und Ausgabe

Zugänglich über

Offener Zugang

Dauer

00:08:34 Min

Aufnahmedatum

2020-07-29

Hochgeladen am

2020-10-16 16:46:50

Sprache

de-DE

Bildschirmausgabe mittels CGA Textmode für Aufgabe 1 der Lehrveranstaltung Betriebssysteme.

Folien und Transkript zum Video.

Tags

betriebssysteme operating systems stubs
Einbetten
Wordpress FAU Plugin
iFrame
Teilen